perm filename BEAMS.OLD[XX,LCS]7 blob
sn#223789 filedate 1976-07-07 generic text, type T, neo UTF8
00100 C***** BEAMS, XNOTE, BAUTO, UPDATE, SLEND, POSIT *******
00200 SUBROUTINE BEAMS
00300 INTEGER UPDN
00400 COMMON/XRN/RN(2000)
00500 COMMON/RINP/R(10,80),POSNT(0/99) /RMOD/RMODE2,SET4,IBEAM,
00600 1 NOSET,STEM,STUP,NTC,PS2,RAM,RDD,IT,POS
00700 1 /FRMT/F78F(1),FA1(1),FA5(1),IREAD /ALF/INP(72),ML
00800 1 /PTR/PWDS(250),ITEM,LL,IS,IX
00900 COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
01000 COMMON R2,JAZ,CENTR,JBZ,RJQ(20),JQ(20) /STF/RSTFAC(8),RSTJ2
01100 COMMON/SCX/RHY(4),JALPHA(30),JX,U,JZ,IRHY,JD,KA,KB,IZ
01200 1 /SC/J,L,MK,ISKP,XMINUS,N,IEXP,LK,NNUM,JJ,JA,DBST,NFLG
01300 1 ,IXX,ISEMI,IQT,VX(50),IAMP,K,KN,M,MODE,IBLA
01400 DATA BX/25./,BY/.5/,DFAC/6./,CURV/0.9/
01500 C THESE ARE USED TO DETERMINE CURVE OF SLURS AT 63 (21700)
01600
01700 IF(RMODE.LT.500)GO TO 251
01800 IF(MODE.EQ.4)RETURN
01900 C PICKS UP SLURS ONLY WHEN USING SUBR. 'EXTRA' *********
02000 251 INVT=-1
02100 IF(MODE.EQ.3)GO TO 25
02200 IF(REND.NE.0)GO TO 25
02300 REND=3
02400 25 DO 1500 K=1,72
02500 IF(INP(K).EQ.'B')GO TO 22
02600 C B=AUTOMATIC BEAMS.
02700 IF(INP(K).NE.'*')GO TO 1500
02800 15 INP(72)='*'
02900 GO TO 500
03000 1500 IF(INP(K).EQ.ISEMI)GO TO 500
03100 GO TO 15
03200 C ABOVE FOR 2ND LNE OF INPUT. IF LNS ENDS WITHOUT * OR ;, IT PUTS IN *
03300 22 REREAD F78F,A,B,C
03400 C TYPE '2B' OR '3B' ETC. FOR AUTOMATIC BEAMS. (2=DUPLE 3=TRIPLE)
03500 IF(IREAD.NE.-1)GO TO 1122
03600 A=B
03700 B=C
03800 C IREAD=-1 WHEN READING SOS FILES. (=-2 WITH ET FILES.)
03900 1122 A=A/2.
04000 C '2'=1 '3'=1.5 '2B 3;' MEANS THERE'S A 3 NOTE PICK-UP.
04100 IF(STEM)STEM=0
04200 C STEM=10 OR 20 IF ALREADY SETUP IN NOTES
04300 K=0
04400 N=0
04500 J=0
04600 INP(72)='*'
04700 C PICKS UP RHYTHM FROM TIME WHEN MODE=2 (NOW IT =4)
04800 IF(B.EQ.0)GO TO 122
04900 K=B
05000 B=0
05100 C=0
05200 DO 2122 NN=1,K
05300 IF(V(NN))GO TO 3122
05400 B=B+1
05500 C UPDATE COUNTER
05600 GO TO 2122
05700 3122 N=N+1
05800 C TO SKIP OVER RESTS
05900 2122 C=C+ABS(V(NN))
06000 IF(B.LE.1)GO TO 122
06100 IF(C.GT.A)GO TO 122
06200 C SKIPS IF PICK-UP HAS LONGER TOTAL THAN BEAM RANGE (A)
06300 J=2
06400 VX(1)=1
06500 VX2=B
06600 C PUTS BEAM ON PICK-UP IF MORE THAN ONE NOTE.
06700 122 K=K+1
06800 L=K
06900 222 C=ABS(V(K))
07000 IF(C.EQ.4./88.)GO TO 522
07100 C CATCHES 88TH NOTES (GRACE NOTES)???
07200 IF(V(K).GT.0)GO TO 922
07300 1022 N=N+1
07400 C SUBTRACTS NUMB. FOR REST.
07500 IF(C.GE.A)GO TO 1222
07600 1322 L=L+1
07700 GO TO 422
07800 1222 IF(AMOD(C,A).NE.0)GO TO 622
07900 IF(K-L.LE.1)GO TO 522
08000 L=L+1
08100 GO TO 722
08200 922 IF(C.EQ.A)GO TO 522
08300 IF(C.GE.1)L=L+1
08400 422 IF(K.EQ.IRHY)GO TO 322
08500 K=K+1
08600 5022 B=V(K)
08700 IF(B.NE.4./88.)GO TO 2022
08800 JMP=K
08900 3022 IF(V(K+1).NE.4./88.)GO TO 4022
09000 C TO BEAM GRACE NOTES WHEN IN AUTOMATIC MODE.
09100 K=K+1
09200 GO TO 3022
09300 C GO BACK FOR MORE
09400 4022 IF(K.EQ.JMP)GO TO 422
09500 C GO AWAY IF THERE IS ONLY ONE GRACE NOTE.
09600 CALL BAUTO(J,JMP,K,N)
09700 C I HOPE THE ARGS. ARE OK!
09800 IF(JMP.EQ.L)L=K
09900 C DOES GRACE NOTE BEAM COME UNDER BIG BEAM(JMP≠L) OR NOT(JMP=L).?
10000 GO TO 422
10100 2022 C=C+ABS(B)
10200 IF(B.GT.0)GO TO 1922
10300 IF(-B.LT.A)GO TO 1022
10400 C GO BACK TO PUT A REST UNDER A BEAM.
10500 N=N+1
10600 C UPDATE REST COUNTER IF IT GETS TO HERE.
10700 1922 IF(C.LT.A-.0001)GO TO 422
10800 IF(C.LT.A+.0001)GO TO 722
10900 C .0001 FOR ROUNDOFF PROBLEMS
11000 C=AMOD(C,A)
11100 IF(K-L.LE.1)GO TO 622
11200 CALL BAUTO(J,L,K-1,N)
11300 622 L=K
11400 IF(ABS(V(K)).GE.A)GO TO 77
11500 IF(C.NE.0)GO TO 422
11600 77 L=L+1
11700 GO TO 422
11800 722 IF(K.EQ.L)GO TO 522
11900 1722 DO 1422 IT=L,K
12000 B=V(IT)
12100 IF(B.EQ.4./6.)GO TO 1522
12200 IF(B.EQ..875)GO TO 1422
12300 C .875=(8..)
12400 IF(B.GT..75)GO TO 1522
12500 1422 CONTINUE
12600 C WON'T PUT BEAMS WHERE NOT LOGICAL. CATCHES QUINTS AND SEXT'S.
12700 IF(V(L)+V(K).LT.A+.0001)CALL BAUTO(J,L,K,N)
12800 C DOES ONLY DUPLES AT THIS POINT.
12900 522 IF(K.LT.IRHY)GO TO 122
13000
13100 322 IF(J.EQ.0)RETURN
13200 C NO BEAMS - SO GO BACK.
13300 DO 822 K=J+1,50
13400 C USES ONLY 68 SLOTS IN 'V'
13500 822 VX(K)=0
13600 J=0
13700 GO TO 511
13800 1522 IF(IT-1.GT.L)GO TO 1622
13900 1822 L=IT+1
14000 IF(L.LT.K)GO TO 1722
14100 GO TO 522
14200 1622 CALL BAUTO(J,L,IT-1,N)
14300 GO TO 1822
14400 C ALL THIS ↑↑ FOR QUARTERS IN TRIPLE TIME UNITS!
14500 CC27 DO 26 L=1,50
14600 CC26 VX(L)=V(L)
14700 C BECAUSE MODE 3 IS NOW ACCENTS, ETC.
14800 CC GO TO 511
14900
15000 500 REREAD F78F,VX
15100 IF(MODE.EQ.5)NTC=NTC-1
15200 C NTC=NUM OF NTS NOW
15300 J=0
15400 IF(IREAD.EQ.-1)J=1
15500 C SKIPS LINE #S IN SOS FILES. (=-2 IS FOR ET FILES.)
15600 511 J=J+1
15700 N=VX(J)
15800 JMP=1
15900 505 L=0
16000 K=0
16100 POS=-10.
16200 IF(MODE.EQ.3)GO TO 5032
16300 C MODE 3 IS FOR ACCENTS ETC.
16400 RN(8+IS)=0
16500 RN(9+IS)=0
16600 IT=0
16700 UPDN=0
16800 IF(MODE.EQ.5)GO TO 104
16900 IF(STEM.EQ.0)GO TO 503
17000 C UPDN=2=STEMS DOWN, (SLUR DIP UP) =1, OPPOSITE.
17100 104 JA=J+1
17200 B=VX(JA)
17300 C THE 2ND NOTE (-=DIP DOWN ALWAYS; +100=UP ALWAYS, ORD.=AUTOMATIC)
17400 IF(B.LT.100)GO TO 512
17500 UPDN=2
17600 B=B-100
17700 IF(B.GT.100)B=100-B
17800 C TYPE -NUM OR 200+NUM FOR DIP DOWN.
17900 512 IF(B)UPDN=1
18000 VX(JA)=B
18100 IF(MODE.EQ.4)GO TO 503
18200 BRK=AMOD(VX(J),1.)*10.
18300 IF(BRK.EQ.0)GO TO 503
18400 C NEXT FOR TRIPL. BRACKET, ETC. ADD DESIRED .NUM TO 1ST NUM.
18500 RN(9+IS)=BRK+.0001
18600 GO TO 5030
18700 503 IF(N.GT.0)GO TO 5031
18800 IT=-1
18900 C6/75 POS=-1.3
19000 CALL SLEND
19100 C -1= SLUR INTO 1ST NOTE.
19200 C SETS POS OF LFT SIDE (-10+9, THEN +2)
19300 GO TO 5060
19400 5031 IF(N.LE.NTC)GO TO 5030
19500 C NTC=NUM OF NTS
19600 C6/75 POS=202
19700 CALL SLEND
19800 C SLEND CHECKS ON END POINTS OF THIS STAFF
19900 GO TO 504
20000 C -1=1ST SLUR FROM NO NOTE; 99= LAST, TO NO NOTE
20100 5032 IF(N.GT.IRHY)N=IRHY
20200 C TRAPS ERROR OF TRYING TO PUT MARK ON NON-EXISTENT NOTE.
20300 5030 L=L+1
20400 502 K=K+1
20500 IF(R(1,K).NE.1.)GO TO 502
20600 C IS IT A NOTE?
20700 P=R(3,K)
20800 IF(P.EQ.POS)GO TO 502
20900 C SKIPS DBLSTPS
21000 POS=P
21100 506 IF(L.LT.N)GO TO 5030
21200 5060 IF(MODE.EQ.3)GO TO 30
21300 C NOW SLUR STARTS
21400 IF(JMP)GO TO 504
21500 C JMP=-1 MEANS END NOTE OF GROUP
21600 J=J+1
21700 NN=VX(J)
21800 C IF 2ND NUM IS .LE. 1ST , THEN 2-NOTE SLUR. (-1 GOES TO 1)
21900 IF(NN.EQ.0)NN=N+1
22000 IF(NN.EQ.0)NN=1
22100 IF(NN)GO TO 777
22200 IF(NN.LE.N)NN=N+1
22300 C FOR USE WITH AUTO-BEAMS OR DIP UP. 2-NOTE SLUR OR BEAM UP.
22400 CC777 IF(STEM)GO TO 5061
22500 777 IF(MODE.NE.4)GO TO 5061
22600 CC IF(MODE.NE.4)GO TO 177
22700 IF(STEM.LE.0)GO TO 5061
22800 C AUTOMATIC DIP DIRECTION FOR SLURS WITH AUTO. BEAMS.
22900 177 MK=K
23000 877 IF(R(1,MK).EQ.1)GO TO 477
23100 MK=MK+1
23200 GO TO 877
23300 C FOR SLUR INTO FIRST NOTE WITH AUTO BEAMS.
23400 477 A=19.-R(5,MK)
23500 IF(NN.GE.0)GO TO 277
23600 IF(A.GT.0)GO TO 377
23700 277 IF(A.GE.0)GO TO 5061
23800 IF(NN.LE.0)GO TO 5061
23900 377 NN=-NN
24000 5061 MK=N
24100 N=IABS(NN)
24200 M=K
24300 JA=3
24400 JB=4
24500 KN=K
24600 RB=0
24700 IF(MODE.EQ.4)GO TO 550
24800 IBR=6
24900 C 6=SLUR, 7=BRACK. FOR TRIPLETS, ETC.
25000 CC*** NOT NEEDED NOW WITH UPDN FEATURE. IF(STEM.GE.0)NN=-NN
25100 IF(IT)GO TO 550
25200 C IT=-1=SLUR INTO 1ST NOTE.
25300 A=XNOTE(K)
25400 C XNOTE IS AMOD(R(4,K),100.)
25500 C SAVES LEVEL OF 1ST NOTE.
25600 504 RB=2
25700 B=AMOD(R(6,K),1.0)
25800 IF(B.GE.0.5)RB=3.
25900 IF(B.EQ.0.4)RB=5.
26000 C THESE ARE FOR >(.5) AND ∧(.4) ACCENTS
26100 IF(NN)RB=-RB
26200 C DIP IS SET BY PARAM 7. (STEM DIR. IS AUTOMATIC)
26300 550 RN(JA+IS)=POS
26400 B=XNOTE(K)
26500 IF(MODE.EQ.4)GO TO 519
26600 C TO MAKE MINI-BEAMS ON GRACE NOTES WHEN NEEDED.
26700 IF(MODE.NE.5)GO TO 513
26800 SLUR=0
26900 C A FLAG FOR LATER USE.
27000 MB=R(5,K)/10.
27100 CC IF(JMP.GE.0.AND.UPDN.EQ.0)GO TO 515
27200 IF(UPDN.EQ.0)GO TO 515
27300 IF(MB.EQ.0)MB=UPDN
27400 C MB=0 IF 2ND NOTE IS WITHOUT STEM
27500 IF(MB.EQ.UPDN)GO TO 515
27600 X=6
27700 IF(RB)X=-X
27800 RB=RB+X
27900 JA=3
28000 IF(JMP)JA=6
28100 IF(RB)GO TO 204
28200 IF(UPDN.EQ.2)GO TO 516
28300 204 IF(UPDN.EQ.1)GO TO 516
28400 C ABOVE FOR VARIOUS COMBINATIONS OF STEM DIRECTIONS
28500 RB=-RB
28600 NN=-NN
28700 516 IF(K.GT.1)GO TO 16
28800 IF(IT)GO TO 513
28900 16 IF(K.NE.NTC)GO TO 116
29000 IF(N.GT.NTC)GO TO 513
29100 C JUMP IF N=99, BY PASS IF K IS NOT LAST NOTE OF LINE.
29200 116 SLUR=1.
29300 IF(UPDN.EQ.1)SLUR=-SLUR
29400 SLUR=SLUR*RSTJ2
29500 RN(JA+IS)=RN(JA+IS)+SLUR
29600 C THIS NOT DONE IF SLUR TO FIRST NOTE
29700 GO TO 513
29800 519 B=R(4,K)
29900 A=R(10,K)
30000 IF(A.EQ.0)GO TO 513
30100 C JUMP IF IT'S NOT ON DIFF STF.
30200 RA=RSTJ2*2.44
30300 C NOTE WIDTH
30400 IF(ABS(B).GE.100)RA=RA*.6
30500 C MINI
30600 IF(A.EQ.2)RA=-RA
30700 C STAFF ABOVE
30800 RN(JA+IS)=POS+RA
30850 C ***** THIS CAN BE OFF A LITTLE IN SOME CASES!!******
30900 GO TO 513
31000
31100
31200 517 IF(MB.EQ.1)GO TO 513
31300 IF(RB)RB=-RB
31400 GO TO 518
31500 515 UPDN=MB
31600 C AUTO SLUR DIP DEPENDS ON STEM DIREC. OF 1ST NOTE. (WHOLE NTS??)
31700 IF(NN)GO TO 517
31800 IF(MB.NE.1)GO TO 513
31900 RB=-RB
32000 518 NN=-NN
32100 513 RN(JB+IS)=B+RB
32200 JA=6
32300 JB=5
32400 C MK=# OF 1ST NOTE, N=END NOTE NOW
32500 JMP=-JMP
32600 IF(JMP.GT.0)GO TO 1503
32700 C GO FIND RT. SIDE OF SLUR
32800 IF(N.LE.MK)N=MK+1
32900 C PICKS UP TYPO ERRORS
33000 JK=0
33100 IF(R(7,K).GE.10)JK=-1
33200 C CHECKS FOR DOT AFTER 1ST NOTE -- FOR TIES.
33300 GO TO 503
33400
33500 1503 RN(2+IS)=STAFF
33600 IF(MODE.EQ.4)GO TO 35
33700 RN(8+IS)=-1
33800 RN(1+IS)=5
33900 IF(IT)RN(4+IS)=RN(5+IS)
34000 NN=-NN
34100 C IF NN IS NEG. NOW IT MEANS STEM DOWN.(DIP IS UP!)
34200 IF(MK.EQ.IRHY)GO TO 61
34300 IF(N.EQ.1)GO TO 61
34400 CC IF(((XNOTE(K).NE.A.OR.N-MK.GT.1).AND.IT.GE.0.
34500 CC 1 ).OR.IT)GO TO 60
34600 IF(IT)GO TO 60
34700 IF(XNOTE(K).NE.A)GO TO 60
34800 IF(N-MK.GT.1)GO TO 60
34900 CCC IF(R(5,M).NE.R(5,K))GO TO 65
35000 CCC FOR SLUR OVER CHROMATIC CHANGE ON SAME NOTE NAME.
35100 C M=1ST NOTE OF SLUR, K=LAST
35200 IF(AMOD(R(5,K),10.0).GT.0)GO TO 65
35300 C JUMP IF LAST NOTE AS ACCI.
35400 C JUMP IF NOT ADJACENT NOTE AT SAME PITCH AND NOT 1ST OR LAST.
35500 61 C=9
35600 IF(JK)C=12
35700 IF(RN(6+IS)-RN(3+IS)-C*RSTJ2)GO TO 65
35800 C JUMP IF SLUR IS VERY SHORT
35900 IF(IT)A=XNOTE(K)
36000 C IT=-1=SLUR INTO 1ST NOTE.
36100 A=A+.7
36200 IF(NN.GT.0)A=A-1.4
36300 C TO RAISE OR LOWER IT .5
36400 RN(4+IS)=A
36500 RN(5+IS)=A
36600 B=-2
36700 IF(JK)B=-3
36800 C JK=-1 WHEN NOTE IS DOTTED.
36900 C THIS PUTS TIE BETWEEN (NOT ABOVE OR BELOW) NTS. NO STEM CHNG.
37000 RN(8+IS)=B
37100 IF(SLUR.EQ.0)GO TO 65
37200 RN(3+IS)=RN(3+IS)-SLUR
37300 RN(6+IS)=RN(6+IS)-SLUR
37400 C PUSH SLUR BACK TO WHERE IT WAS
37500 GO TO 65
37600
37700 C** 6/16/75 60 IF(STEM.GE.0)GO TO 508
37800 60 IF(STEM.GE.0)GO TO 200
37900 IF(MODE.EQ.5)GO TO 200
38000 C JUMP IF SLURS**************
38100 C NEXT IS STEM INVERTER. SKIP IF AUTOMATIC BEAMS OR 'SU' 'SD' IN USE.
38200 JB=1
38300 RB=10.
38400 IF(NN)GO TO 509
38500 C IF NN IS NEG. NOW IT MEANS STEM DOWN.(DIP IS UP!)
38600 RB=-RB
38700 JB=2
38800 509 DO 507 L=M,K
38900 IF(R(1,L).NE.1.)GO TO 507
39000 JA=R(5,L)/10.
39100 IF(JA.NE.JB)GO TO 507
39200 R(5,L)=R(5,L)+RB
39300 INVT=0
39400 C**********************************************
39500 507 CONTINUE
39600 CC508 IF(N.GT.100)GO TO 514
39700 C**** NO LONGER USED. USE 'SD' 'SU' ** JUMP IF ONLY REVERSING STEMS.
39800 GO TO 200
39900 62 IF(NN)GO TO 64
40000 IF(A.EQ.DMAX)GO TO 65
40100 AA=B-DMAX
40200 GO TO 63
40300 65 AA=0
40400 GO TO 63
40500 64 IF(A.EQ.UMAX)GO TO 65
40600 AA=UMAX-B
40700 63 RA=RN(6+IS)
40800 RB=RN(3+IS)
40900 X=CURV+(RA-RB)/BX+ABS(RN(4+IS)-RN(5+IS))/10.
41000 C CURVE DEPENDS ON LENGTH, TILT AND NOTES BETWEEN.
41100 IF(AA.GT.0)X=X+AA*BY
41200 IF(BRK.EQ.0)GO TO 66
41300 RN(8+IS)=1
41400 RN(3+IS)=RB-.6
41500 RB=R(3,K+1)
41600 C K=END NOTE OF GROUP
41700 IF(K.EQ.IRHY)RB=200.
41800 C ASSUMES LINE STOPS AT 200. (IT COULD BE LONGER!!)
41900 RN(6+IS)=RA+(RB-RA)/2.
42000 IBR=7
42100 C CHECK THESE NUMBERS↑↑↑↑
42200 B=RN(4+IS)
42300 BB=RN(5+IS)
42400 RA=1
42500 IF(A.LT.-1)RA=2.5
42600 C CHANGES HEIGHT. MAKES BRACK. IF N>100.
42700 IF(NN.GT.0)RA=-RA
42800 RN(4+IS)=B+RA
42900 RN(5+IS)=BB+RA
43000 X=2
43100 66 IF(NN.GT.0)X=-X
43200 510 RN(7+IS)=X
43300 IF(MODE.NE.4)GO TO 2514
43400 RN(9+IS)=0
43500 RN(10+IS)=0
43600 RN(IS+11)=-1
43700 CALL UPDATE(9)
43800 IF(JB)CALL BMX(RA)
43900 GO TO 514
44000 2514 L=IS
44100 CALL UPDATE(IBR)
44200 IF(M.EQ.K)GO TO 514
44300 C JUMP OUT IF INTERVENING NOTE.
44400 IF(RN(L+4).NE.RN(L+5))GO TO 514
44500 C IS IT LEVEL?
44600 B=-RN(IS-2)
44700 C CHANGE DIRECTION OF DIP AFTER FIRST SLUR.
44800 RA=1.4
44900 IF(RN(L+8).EQ.-1)RA=RA+1.3
45000 C IS TIE NOT BETWEEN NOTES?
45100 IF(NN.GT.0)RA=-RA
45200 C DIP DIRECTION. NN+ =DOWN, NN- =UP. REVERSED AFTER 1ST ONE.
45300 RA=R(4,M)+RA
45400 C=-2.
45500 IF(RN(L+8).EQ.-3.)C=-3.
45600 C PUT TIE BETWEEN NOTES ALWAYS.
45700 JA=M
45800 JB=K
45900 114 JA=JA+1
46000 JB=JB+1
46050 IF(R(1,JA).NE.1)GO TO 514
46075 C CATCHES THINGS BETWEEN NOTES
46100 IF(R(4,JA).NE.R(4,JB))GO TO 514
46200 C LOOKS FOR PARALLEL CHORDS NOTES
46300 IF(R(9,JA)+R(9,JB).NE.0)GO TO 514
46400 C MAKES SURE THEY ARE CHORD NOTES.
46500 A=R(4,JA)-RA+RN(L+5)
46600 RN(IS)=6.
46700 RN(IS+1)=5.
46800 RN(IS+2)=RN(IS-7)
46900 RN(IS+3)=RN(IS-6)
47000 RN(IS+6)=RN(IS-3)
47100 RN(IS+7)=B
47200 RN(IS+8)=C
47300 RN(IS+4)=A
47400 RN(IS+5)=A
47500 CALL UPDATE(IBR)
47600 GO TO 114
47700 514 J=J+1
47800 A=VX(J)
47900 N=A
48000 C SO ITEMS NEED NOT BE IN RIGHT ORDER.
48100 IF(MOD(N,100).GT.IRHY)A=0
48200 IF(A.NE.0)GO TO 505
48300 IF(J.LT.50)GO TO 514
48400 C SOMETIMES A SLASH IS SEEN AS A 0 (WHEN PRECEDED BY SPACE).
48500 IF(INP(72).NE.'*')GO TO 552
48600 IF(INVT)RETURN
48700 INVT=IS
48800 CALL NEWR
48900 IS=INVT
49000 RETURN
49100 552 IF(IREAD.NE.0)GO TO 3501
49200 CALL TYPE
49300 WRITE(21,4501)INP
49400 GO TO 5501
49500 3501 IF(IREAD.EQ.-1)READ(22,2501)J,INP
49600 IF(IREAD.EQ.-2)READ(22,4501)INP
49700 5501 CALL LNEND
49800 C FOR NEW 'SCORE' CONVENTIONS
49900 C TO READ MORE THAN 2 LINES.
50000 GO TO 25
50100 C FOR 2ND LINE.
50200 4501 FORMAT(72A1)
50300 2501 FORMAT(I,72A1)
50400
50500
50600 35 RA=10.
50700 C RA WILL=# OF TAILS, KN=1ST NOTE, K=LAST ('MOD' FOR DOTTED NOTES.)
50800 RN(1+IS)=6
50900 JMAX=0
51000 IF(N-MK.EQ.1)JMAX=-1
51100 DMAX=100.
51200 UMAX=-DMAX
51300 C FOR AUTO. BEAMS
51400
51500 JB=0
51600 MB=0
51700 C MB=-1 =GRACE NOTES UNDER BEAMS.
51800 IF(ABS(R(4,KN)).GE.100.)MB=-1
51900 DO 2 L=KN,K
52000 IF(R(1,L).NE.1)GO TO 2
52100 BB=R(5,L)
52200 IF(BB.GE.10.)GO TO 12
52300 UPDN=-1
52400 CC IF(R(10,L).EQ.0)NN=19.-AA
52450 NN=19-AA
52500 CHORDS WILL HAVE FIXED STEM DIRECTIONS ALWAYS
52600 GO TO 2
52700 C SKIPS NON-NOTES AND DBLSTPS
52800 12 IF(MB)GO TO 10
52900 AA=BB
53000 RB=R(4,L)
53100 IF(ABS(RB).GE.100)GO TO 2
53200 C SKIPS GRACE NOTES
53300 GO TO 110
53400 10 RB=XNOTE(L)
53500 110 IF(RB.GT.UMAX)UMAX=RB
53600 IF(RB.LT.DMAX)DMAX=RB
53700 C FOR AUTO. BEAMS
53800 RB=AMOD(R(7,L),10.0)
53900 112 IF(RA.EQ.RB)GO TO 2
54000 JB=-1
54100 C FLAG FOR MIXED NUM. OF BEAMS
54200 IF(RB.GE.RA)GO TO 2
54300 IF(RB.NE.0)RA=RB
54400 2 CONTINUE
54500 C ABOVE FINDS SMALLEST # OF TAILS. NEXT FOR HGTS.
54600 C ABOVE IS POS.2
54700 IT=K
54800 C FOR EXTRA BEAMS WITH CHORDS. SAVE IT IN "IT"
54900 IF(STEM.GT.0)GO TO 577
55000 C *****↑↑↑↑↑↑ ABOVE WAS ".NE." BEFORE 4/30/76. WHY?#@&Xαε
55100 IF(UPDN.NE.0)GO TO 577
55200 IF(UMAX+DMAX.GE.14)NN=-1
55300 CXX IF(STEM.GT.0)NN=10.-STEM
55400 C SETS AUTO. BEAMS' STEM DIRECTION.
55500 577 X=10
55600 IF(NN)X=20
55700 IF(MB)RA=2
55800 C 2 BEAMS ON GRACE NOTES ALWAYS
55900 X=X+RA
56000 C # OF BEAMS. IT'S PUT IN DOWN BELOW 550.
56100 200 M=KN
56200 207 L=M+1
56300 IF(R(1,L).NE.1)GO TO 307
56400 IF(R(9,L).NE.0)GO TO 307
56500 M=M+1
56600 GO TO 207
56700 C FOR HEIGHTS OF DBL STPS, ETC.
56800 307 A=XNOTE(M)
56900 C A=NOTE 1.
57000 UMAX=A
57100 DMAX=A
57200 C UP MAX. NOTE #, DOWN MAX. NOTE #.
57300 407 M=K+1
57400 IF(R(1,M).NE.1)GO TO 103
57500 IF(R(9,M).NE.0)GO TO 103
57600 C FINDS DBL+ STP ON LAST OF BEAM
57700 K=M
57800 GO TO 407
57900 103 DO 3 M=KN,K
58000 IF(R(1,M).NE.1)GO TO 3
58100 IF(M.EQ.K)GO TO 107
58200 IF(R(10,M).NE.0)GO TO 107
58300 IF(R(9,M+1).EQ.0)GO TO 3
58400 C IGNORE LOWER (OR UPPER) NOTES OF CHORDS - IN RE. UP-DOWN FEATURE.
58500 107 IF(MB)GO TO 7
58600 C SKIP IF DEALING WITH GRACE NOTE BEAMS. (MB=-1)
58700 IF(ABS(R(4,M)).GE.100)GO TO 3
58800 C SKIPS NON-NOTES
58900 7 B=XNOTE(M)
59000 CC IF(STEM.GT.0)GO TO 55
59100 CC IF(MODE.NE.5)GO TO 677
59200 CC IF(STEM.EQ.0)GO TO 55
59300 IF(MODE.EQ.5)GO TO 55
59400 677 Y=R(5,M)
59500 33 IF(NN.GT.0)GO TO 5
59600 C JUMP IF STEM UP
59700 IF(Y.GE.20.)GO TO 55
59800 IF(Y.LT.10.)GO TO 55
59900 R(5,M)=Y+10.
60000 GO TO 551
60100 5 IF(Y.LT.20.)GO TO 55
60200 R(5,M)=Y-10.
60300 C************************
60400 C STEM UP
60500 551 INVT=0
60600 55 IF(B.LE.UMAX)GO TO 13
60700 C ↑↑↑↑↑↑↑↑ WAS .LT. !!!!! 5/76
60800 UMAX=B
60900 IF(JMAX)GO TO 3
61000 IF(M.EQ.KN)GO TO 3
61100 IF(M.EQ.K)GO TO 3
61200 UMAX=UMAX+1
61300 GO TO 3
61400 13 IF(B.GT.DMAX)GO TO 3
61500 DMAX=B
61600 IF(JMAX)GO TO 3
61700 IF(M.EQ.KN)GO TO 3
61800 IF(M.EQ.K)GO TO 3
61900 DMAX=DMAX-1
62000 3 CONTINUE
62100 C LOOKS FOR LOWER AND HIGHER NOTES THAN NOTE 1.
62200 4 IF(MODE.EQ.5)GO TO 62
62300 K=IT
62400 C FOR EXTRA BEAMS WITH CHORDS. K WAS SAVED IN "IT"
62500 AA=A
62600 BB=B
62700 C=1
62800 IF(X.LT.20.)GO TO 48
62900 C JUMP IF STEM IS UP
63000 CALL EXCH(AA,BB)
63100 C=-C
63200 CALL EXCH(UMAX,DMAX)
63300 48 IF(AA.LT.BB)GO TO 45
63400 IF(UMAX.EQ.A)GO TO 46
63500 47 A=UMAX-C
63600 B=A
63700 GO TO 444
63800 46 IF(UMAX.GT.AA)GO TO 47
63900 GO TO 49
64000 45 IF(UMAX.NE.B)GO TO 47
64100 49 A=AA
64200 B=BB
64300 IF(X.GE.20)CALL EXCH(A,B)
64400
64500 444 RN(2+IS)=STAFF
64600 446 DIS=(RN(IS+6)-RN(IS+3))/DFAC
64700 C FOR TILT LATER -- DFAC IS IN DATA
64800 IF(ABS(A-B).LT.DIS)GO TO 14
64900 C=C*DIS
65000 C NEW TILT ROUTINE. CONSIDERS DISTANCE:HEIGHT
65100 C LIMITS SLOPE OF BEAM
65200 IF(X.GE.20)GO TO 141
65300 IF(B.GT.A)GO TO 140
65400 142 B=A-C
65500 GO TO 14
65600 141 IF(B.GT.A)GO TO 142
65700 140 A=B-C
65800 14 IF(MB.EQ.0)GO TO 143
65900 C NEXT FOR GRACE NOTE BEAMS (MB=-1)
66000 C=100
66100 IF(A)C=-C
66200 A=A+C
66300 143 RN(4+IS)=A
66400 RN(5+IS)=B
66500 C MAKES HORIZONTAL BEAMS IF PATTERN IS UP-DOWN.
66600 C*******?????? RN(6+IS)=R(3,K)
66700 C ABOVE IS POS.2
66800 GO TO 510
66900
67000 C NEXT IS FOR ACCENTS AND OTHER MARKS
67100
67200 30 CALL MARKS(RA)
67300 J=J+1
67400 IF(RA.EQ.99)RA=VX(J)
67500 C IF STEM IS DOWN OR THERE ARE NOTES BELOW(DBL STP), POSITION
67600 C OF ACCENT WILL BE INVERTED.
67700 IF(RA.LT.40)GO TO 304
67800 NN=6
67900 BB=-4
68000 A=3
68100 B=3
68200 IF(R(4,K).LT.3)BB=R(4,K)-7.5
68300 C LOWERS ITEM IF NOTE BELOW STAFF. BUT IS 'K' ALWAYS OK HERE??????
68400 IF(RA.LT.99)GO TO 305
68500 C NEXT FOR CRESC. & DECRSC. LINES<,>. TYPE /NT1 C+ NT2/ OR /N1.d C- N2.d/
68600 NN=8
68700 BB=BB+2.5
68800 A=5
68900 B=4
69000 RN(IS+7)=RA-200
69100 C MAKES ZERO OR -1 IN P7
69200 RA=50
69300 C ADDS A NEW ITEM. MP, PP, CRESC., ETC. --CODE 3
69400 305 RN(IS)=A
69500 RN(IS+1)=B
69600 RN(IS+2)=STAFF
69700 C PUTS MF, ETC. BETWEEN NOTES. (I HOPE) SEE 'FUNCTION POSIT' BELOW
69800 RN(IS+3)=POSIT(VX(J-1))
69900 C '+2' PUSHES IT TO RIGHT. MAYBE CHANGE ORIGINAL POSITIONS??
70000 RN(IS+4)=BB
70100 C DIST. BELOW STAFF
70200 RN(IS+5)=RA
70300 C THE CODE NUM IN 'CLEFS' LIST
70400 IS=IS+NN
70500 IF(NN.EQ.6)GO TO 514
70600 J=J+1
70700 RN(IS-2)=POSIT(VX(J))
70800 C THIS IS P6 (POS2 FOR CRESC. LINES)
70900 GO TO 514
71000 304 RB=R(6,K)
71100 B=10.
71200 IF(RA.EQ.6)RA=26.
71300 C TEMPORARY CHANGE FOR FERMATA*******
71400 IF(RA.GT.10.)RA=RA/10.
71500 A=ABS(AMOD(RB,1.))
71600 IF(A.EQ.0)GO TO 301
71700 IF(RA.GT.3)GO TO 303
71800 RB=FLOAT(IFIX(RB))
71900 RA=RA+A/10.
72000 C THIS PUTS 2-DIGIT CODE BEFORE 1-DIGIT CODE.
72100 GO TO 301
72200 303 IF(A.LT..3)GO TO 302
72300 B=100.
72400 GO TO 301
72500 302 B=1000.
72600 301 IF(RB.LT.0)RA=-RA
72700 R(6,K)=RB+RA/B
72800 GO TO 514
72900 C USES 4-7,9,11-13 FOR ACC. > FERM. DOT - DNBOW UPBOW HARM.
73000 C NOTE#,ACCENT#/N,A/N,A*
73100 END
73200
73300 CF FUNCTION XNOTE(J)
73400 CF COMMON/XRN/RN(4000)
73500 CF DIMENSION R(10,80)
73600 CF EQUIVALENCE (R,RN(3001))
73700 CF XNOTE=AMOD(R(4,J),100.)
73800 CF END
73900
74000 CF SUBROUTINE BAUTO(J,L,K,N)
74100 C FOR AUTOMATIC BEAMS.
74200 CF COMMON/SCM/V(78),I,LCNT,STAFF,LIST(200),REND
74300 CF J=J+2
74400 CF V(J-1)=L-N
74500 CF V(J)=K-N
74600 CF END
74700
74800 CF SUBROUTINE UPDATE(I)
74900 CF COMMON /PTR/PWDS(250),ITEM,LL,IS,IX /XRN/RN(4000)
75000 CF RN(IS)=I
75100 CF IS=IS+I+3
75200 CF END
75300
75400 C SUBROUTINE SLEND
75500 C INTEGER PWDS
75600 C TO FIND END POINTS OF STAVES
75700 C COMMON/XRN/RN(2000),IT,POS,RA,NN,JB,RB,A,B,JMP,JK,C,DMAX,
75800 C 1 UMAX,AA,JMAX,X,Y,BB,RNX(1982)
75900 1/SCM/V(78),I,LCNT,STAFF,LIST(200),REND/PTR/PWDS(250),ITEM,LL,IS,IX
76000 C DO 1 K=1,ITEM
76100 C L=PWDS(K)
76200 C IF(RN(L+1).NE.8)GO TO 1
76300 C FOUND A STAFF
76400 C IF(RN(L+2).NE.STAFF)GO TO 1
76500 C GOT THE RIGHT ONE
76600 C IF(IT)GO TO 2
76700 C POS=202
76800 C NOW CHECK LEFT SIDE OF STAFF
76900 C IF(RN(L).LT.4)RETURN
77000 C P6 WASN'T MENTIONED - SO IT =200
77100 C POS=RN(L+6)+2
77200 C IF(POS.EQ.2)POS=202
77300 C RETURN
77400 C2 POS=RN(L+3)-2.3
77500 C RETURN
77600 C1 CONTINUE
77700 C END
77800
77900 C FUNCTION POSIT(V)
78000 C COMMON/XRN/RN(4000)
78100 C DIMENSION POSNT(0/82)
78200 C EQUIVALENCE (POSNT,RN(3801))
78300 C 1,(A,RN(3884)),(K,RN(3885))
78400 C IF(V)V=-V
78500 C REREAD OR SOMETHING MAKES /1 C- 2/ GIVE A -2 FOR LAST NUM.!!!???
78600 C K=V
78700 C A=POSNT(K)
78800 C POSIT=A+(POSNT(K+1)-A)*AMOD(V,1.0)
78900 C TYPE /2.3 -- FOR POSITION BETWEEN NTS 2 AND 3. ETC.
79000 C END